package uf1

type UnionFind struct {
	id []int
	count int
}

func (uf *UnionFind) newUnionFind(n int) {
	uf.count = n
	uf.id = make([]int, n)
	for i := 0; i < n; i++ {
		uf.id[i] = i
	}
}

func (uf *UnionFind) find(p int) int {
	return uf.id[p]
}

func (uf *UnionFind) isConnected(p int, q int) bool {
	return uf.find(p) == uf.find(q)
}

func (uf *UnionFind) union(p int, q int) {
	pId := uf.find(p)
	qId := uf.find(q)
	if pId == qId {
		return
	}

	for i := 0; i < uf.count; i++ {
		if uf.find(i) == pId {
			uf.id[i] = qId
		}
	}
}